﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Globalization;

namespace UOL.PagSeguro {
    public class Produto {

        private string _codigo;
        private string _descricao;
        private int _quantidade;
        private double _valor;
        private int _peso;
        private double _frete;
        private double _valorExtra;

        #region Propriedades
        /// <summary>
        /// Número do produto. Número único que identifica o produto em sua loja (não pode se repetir).
        /// Máximo de Caracteres: 100
        /// </summary>
        public string Codigo {
            get { return _codigo; }
            set { _codigo = value; }
        }

        /// <summary>
        /// Descrição e/ou título do produto.
        /// Máximo de Caracteres: 100
        /// </summary>
        public string Descricao {
            get { return _descricao; }
            set { _descricao = value; }
        }

        /// <summary>
        /// Quantidade de produtos.
        /// Quantidade Máxima: 999
        /// </summary>
        public int Quantidade {
            get { return _quantidade; }
            set { _quantidade = value; }
        }

        /// <summary>
        /// Valor do produto.
        /// Valor Máximo: 99999.99
        /// </summary>
        public double Valor {
            get { return _valor; }
            set { _valor = value; }
        }

        /// <summary>
        /// Peso do produto em gramas.
        /// Peso Máximo: 99999
        /// </summary>
        public int Peso {
            get { return _quantidade; }
            set { _quantidade = value; }
        }

        /// <summary>
        /// Valor do frete do produto.
        /// Valor Máximo: 99999.99
        /// </summary>
        public double Frete {
            get { return _frete; }
            set { _frete = value; }
        }

        /// <summary>
        /// Valor extra cobrado pelo produto.
        /// Esta campo é somente utilizado na comunicação de retorno da venda
        /// </summary>
        public double ValorExtra {
            get { return _valorExtra; }
            set { _valorExtra = value; }
        }
        #endregion

        public Produto() {

        }

        public NameValueCollection GetParametros(int ordem) {
            NameValueCollection nvc = new NameValueCollection();
            nvc.Add("item_id_" + ordem, this.Codigo);
            nvc.Add("item_descr_" + ordem, this.Descricao);
            nvc.Add("item_quant_" + ordem, Convert.ToString(this.Quantidade));
            nvc.Add("item_valor_" + ordem, string.Format(CultureInfo.InvariantCulture, "{0:0.00}", this.Valor).Replace(".", string.Empty).Replace(",", string.Empty));
            if (this.Frete > 0) {
                nvc.Add("item_peso_" + ordem, Convert.ToString(this.Peso));
                nvc.Add("item_frete_" + ordem, string.Format("{0:0.00}", this.Frete).Replace(".", string.Empty).Replace(",", string.Empty));
            }
            return nvc;
        }

    }
}
